package com.test.json;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

/**
 * JsonUtil. <br>
 * Json 工具类.
 * <p>
 * Copyright: Copyright (c) 2010-4-17 下午04:25:33
 * <p>
 * Company: 北京宽连十方数字技术有限公司
 * <p>
 * Author: liuxl@c-platform.com
 * <p>
 * Version: 1.0
 * <p>
 */
public class JsonUtil {

	/** 长日期变量 */
	public static final int longDate = 2;

	/** 长日期的转换 */
	public static DateFormat longDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

	/** 短日期变量 */
	public static final int shortDate = 1;

	/** 短日期的转换 */
	public static DateFormat shortDateFormat = new SimpleDateFormat("yyyy-MM-dd");

	/**
	 * 获取日期转换格式
	 */
	public static DateFormat getDatePattern(int datePattern) {
		if (datePattern == 1) {
			return JsonUtil.shortDateFormat;
		} else {
			return JsonUtil.longDateFormat;
		}
	}

	/**
	 * @param Collection
	 *            对象集合
	 * @param item
	 *            需要获取的属性名称
	 * @param totalCount
	 *            记录总数
	 * @return String
	 */
	public static String getJsonStr(List<? extends Object> list, String[] item, int totalCount) {
		String str = "{results:[";
		if (totalCount != -1) // 带分页的list
		{
			str = "{totalCount:" + totalCount + ",results:[";

		}
		str += JsonArray.fromList(list, item);
		str += "]}";
		return str;
	}

	/**
	 * @param Collection
	 *            对象集合
	 * @param item
	 *            需要获取的属性名称
	 * @param totalCount
	 *            记录总数
	 * @return String
	 */
	public static String getJsonStr(List<? extends Object> list, String[] item, String[] item4long2Date, int totalCount) {
		String str = "{results:[";
		if (totalCount != -1) // 带分页的list
		{
			str = "{totalCount:" + totalCount + ",results:[";

		}
		str += JsonArray.fromList(list, item, item4long2Date);
		str += "]}";
		return str;
	}

	/**
	 * 使用普通java 类集合转换json数据格式
	 * 
	 * @param Collection
	 *            对象集合
	 * @return String json格式的字符串
	 */
	public static String getJsonStringFromCollection(List<? extends Object> list) {
		return JsonArray.fromList(list);
	}

	/**
	 * 使用普通java类集合转换json格式,可以指定需要获取的属性名称
	 * 
	 * @param Collection
	 *            对象集合
	 * @param item
	 *            需要获取的属性名称
	 * @return
	 */
	public static String getJsonStringFromCollection(List<? extends Object> list, String[] item) {
		return JsonArray.fromList(list, item);
	}

	/**
	 * 使用普通java类集合转换json格式,可以指定需要获取的属性名称,并指定需要从long型转换为date型的数据
	 * 
	 * @param Collection
	 *            对象集合
	 * @param item
	 *            需要获取的属性名称
	 * @param item4long2Date
	 *            需要指定的long型转换为日期格式的属性
	 * @return
	 */
	public static String getJsonStringFromCollection(List<? extends Object> list, String[] item, int datePattern) {
		return JsonArray.fromList(list, item, datePattern);
	}

	/**
	 * 使用普通java类集合转换json格式,可以指定需要获取的属性名称,并可以指定其中时间字符串的转换格式
	 * 
	 * @param Collection
	 *            对象集合
	 * @param item
	 *            需要获取的属性名称
	 * @param datePattern
	 *            时间字符串的格式
	 * @return
	 */
	public static String getJsonStringFromCollection(List<? extends Object> list, String[] item, String[] item4long2Date) {
		return JsonArray.fromList(list, item, item4long2Date);
	}

	/**
	 * 使用普通java类集合转换json格式,可以指定需要获取的属性名称,并指定需要从long型转换为date型的数据,还可以指定时间字符串的转换格式
	 * 
	 * @param Collection
	 *            对象集合
	 * @param item
	 *            需要获取的属性名称
	 * @param item4long2Date
	 *            需要指定的long型转换为日期格式的属性
	 * @param datePattern
	 *            时间字符串的格式
	 * @return
	 */
	public static String getJsonStringFromCollection(List<? extends Object> list, String[] item, String[] item4long2Date, int datePattern) {
		return JsonArray.fromList(list, item, item4long2Date, datePattern);
	}

	/**
	 * 使用普通java 类转换json数据格式
	 * 
	 * @param Object
	 *            对象
	 * @return String json格式的字符串
	 */
	public static String getJsonStringFromObject(Object object) {
		return JsonObject.fromObject(object);
	}

	/**
	 * 使用普通java类转换json格式,可以指定需要获取的属性名称
	 * 
	 * @param object
	 *            对象
	 * @param item
	 *            需要获取的属性名称
	 * @return
	 */
	public static String getJsonStringFromObject(Object object, String[] item) {
		return JsonObject.fromObject(object, item);
	}

	/**
	 * 使用普通java类转换json格式,可以指定需要获取的属性名称,并可以指定其中时间字符串的转换格式
	 * 
	 * @param object
	 *            对象
	 * @param item
	 *            需要获取的属性名称
	 * @param datePattern
	 *            时间字符串的格式
	 * @return
	 */
	public static String getJsonStringFromObject(Object object, String[] item, int datePattern) {
		return JsonObject.fromObject(object, item, datePattern);
	}

	/**
	 * 使用普通java类转换json格式,可以指定需要获取的属性名称,并指定需要从long型转换为date型的数据
	 * 
	 * @param object
	 *            对象
	 * @param item
	 *            需要获取的属性名称
	 * @param item4long2Date
	 *            需要指定的long型转换为日期格式的属性
	 * @return
	 */
	public static String getJsonStringFromObject(Object object, String[] item, String[] item4long2Date) {
		return JsonObject.fromObject(object, item, item4long2Date);
	}

	/**
	 * 使用普通java类转换json格式,可以指定需要获取的属性名称,并指定需要从long型转换为date型的数据,还可以指定时间字符串的转换格式
	 * 
	 * @param object
	 *            对象
	 * @param item
	 *            需要获取的属性名称
	 * @param item4long2Date
	 *            需要指定的long型转换为日期格式的属性
	 * @param datePattern
	 *            时间字符串的格式
	 * @return
	 */
	public static String getJsonStringFromObject(Object object, String[] item, String[] item4long2Date, int datePattern) {
		return JsonObject.fromObject(object, item, item4long2Date, datePattern);
	}

	/** */
	/**
	 * 从json对象集合表达式中得到一个java对象列表
	 * 
	 * @param jsonString
	 * @param pojoClass
	 * @return
	 */
	public static List getList4Json(String jsonString, Class pojoClass) {

		JSONArray jsonArray = JSONArray.fromObject(jsonString);
		JSONObject jsonObject;
		Object pojoValue;

		List list = new ArrayList();
		for (int i = 0; i < jsonArray.size(); i++) {

			jsonObject = jsonArray.getJSONObject(i);
			pojoValue = JSONObject.toBean(jsonObject, pojoClass);
			list.add(pojoValue);

		}
		return list;

	}
}
